--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[[

    天赋名字：

    【完成】机械的解放      :       mechanical_liberation
    【完成】进化的古老      ：      ancient_evolution
    【完成】进化的解析      ：      evolution_analysis
    【完成】进化的锋锐      ：      evolution_sharpness
    【完成】更加锋锐I       ：      sharper_I
    【完成】更加锋锐II      ：      sharper_II
    【完成】更加锋锐III     ：      sharper_III
    【完成】更加锋锐IV      ：      sharper_IV
    【完成】通用能源        ：      universal_energy
    【完成】进化的神秘      ：      evolutionary_mystery
    【完成】进化的守御      ：      evolution_defense
    【完成】多臂的进化      ：      multi_armed_evolution
    【完成】进化的精奥      ：      evolution_subtlety
    【完成】进化的电磁      ：      evolutionary_electromagnetism
    【完成】进化的神圣      ：      evolution_holiness
    【完成】进化的迅袭      ：      evolution_rapid_strike
    【完成】进化的武装迅袭  ：      evolution_armored_rapid_strike
    【完成】突破音速        ：      sound_barrier_break
    【完成】创造物的同步    ：      creation_synchronization
    【完成】创造物冲击      ：      creation_impact
    【完成】光束的镇压      ：      beam_suppression
    【完成】机械犬          ：      mechanical_dog
    【完成】生命量产        ：      life_mass_production
    【完成】节能模式        ：      energy_saving_mode
    【完成】过载充能        ：      overload_charging
    超量充能        ：      hyper_charging
    【完成】容量拓展I       ：      capacity_expansion_I
    【完成】容量拓展II      ：      capacity_expansion_II
    【完成】容量拓展III     ：      capacity_expansion_III
    【完成】容量拓展IV      ：      capacity_expansion_IV
]]--
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--- 参数
    local MAX_TALENT_POINTS = TUNING["loramia.Config"].TALENT_MAX_GOT_NUM or 20    --- 最大可拥有数量
    local TALENT_RESET_PUNISHMENT_NUM = TUNING["loramia.Config"].TALENT_RESET_PUNISHMENT or 1 -- 重置天赋树时，扣除的点数
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

return function(inst)
    if not TheWorld.ismastersim then
        return
    end

    inst:AddComponent("loramia_com_talent_tree")
    inst.components.loramia_com_talent_tree:SetMaxCanGotPoints(MAX_TALENT_POINTS)
    inst.components.loramia_com_talent_tree:SetResetPunishmentNum(TALENT_RESET_PUNISHMENT_NUM)
    --------------------------------------------------------------------------------
    --- 进化的武装迅袭  ：      evolution_armored_rapid_strike
        inst:DoTaskInTime(0,function()            
            if inst.components.loramia_com_talent_tree:IsUnlocked("evolution_armored_rapid_strike") then
                inst.components.loramia_com_tag_sys:AddTag("evolution_armored_rapid_strike")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_unlock",function(inst, talent_name)
            if talent_name == "evolution_armored_rapid_strike" then
                inst.components.loramia_com_tag_sys:AddTag("evolution_armored_rapid_strike")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_reset",function()
            inst.components.loramia_com_tag_sys:RemoveTag("evolution_armored_rapid_strike")
        end)
    --------------------------------------------------------------------------------
    --- 容量拓展
        local function capacity_expansion_max_value(inst)
            local ret = 0
            if inst.components.loramia_com_talent_tree:IsUnlocked("capacity_expansion_I") then
                ret = ret + 1000
            end
            if inst.components.loramia_com_talent_tree:IsUnlocked("capacity_expansion_II") then
                ret = ret + 1000
            end
            if inst.components.loramia_com_talent_tree:IsUnlocked("capacity_expansion_III") then
                ret = ret + 1000
            end
            if inst.components.loramia_com_talent_tree:IsUnlocked("capacity_expansion_IV") then
                ret = ret + 1000
            end
            return ret
        end
        inst.components.loramia_com_talent_tree:AddOnLoadFn(function()
            inst.components.hunger.max = TUNING[string.upper("loramia").."_HUNGER"] + capacity_expansion_max_value(inst)
        end)
        inst:ListenForEvent("loramia_com_talent_tree_unlock",function(inst, talent_name)
            inst.components.hunger.max = TUNING[string.upper("loramia").."_HUNGER"] + capacity_expansion_max_value(inst)
        end)
        inst:ListenForEvent("loramia_com_talent_tree_reset",function()
            inst.components.hunger.max = TUNING[string.upper("loramia").."_HUNGER"] + capacity_expansion_max_value(inst)
        end)
    --------------------------------------------------------------------------------
    --- 专属武器的BUG处理
        local function is_laser_cannon_equipping()
            local weapon = inst.components.combat:GetWeapon()
            if weapon and weapon.prefab == "loramia_weapon_laser_cannon" then
                return true,weapon
            end
            return false,nil
        end
        inst:ListenForEvent("loramia_com_talent_tree_reset",function()
            local flag,weapon = is_laser_cannon_equipping()
            if flag then
                inst.components.inventory:SetActiveItem(weapon)
                inst.components.inventory:ReturnActiveItem()
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_unlock",function(_,talent_name)
            if talent_name ~= "creation_synchronization" then
                return
            end
            local flag,weapon = is_laser_cannon_equipping()
            if flag then
                inst.components.inventory:SetActiveItem(weapon)
                -- inst.components.inventory:Equip(weapon)
                inst.components.inventory:ReturnActiveItem()
            end
        end)
    --------------------------------------------------------------------------------
    --- 机械狗
        inst:DoTaskInTime(0,function()            
            if inst.components.loramia_com_talent_tree:IsUnlocked("mechanical_dog") then
                inst.components.loramia_com_tag_sys:AddTag("mechanical_dog_maker")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_unlock",function(inst, talent_name)
            if talent_name == "mechanical_dog" then
                inst.components.loramia_com_tag_sys:AddTag("mechanical_dog_maker")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_reset",function()
            inst.components.loramia_com_tag_sys:RemoveTag("mechanical_dog_maker")
        end)
    --------------------------------------------------------------------------------
    --- 多臂的创造物
        inst:DoTaskInTime(0,function()            
            if inst.components.loramia_com_talent_tree:IsUnlocked("multi_armed_evolution") then
                inst.components.loramia_com_tag_sys:AddTag("multi_armed_creation_maker")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_unlock",function(inst, talent_name)
            if talent_name == "multi_armed_evolution" then
                inst.components.loramia_com_tag_sys:AddTag("multi_armed_creation_maker")
            end
        end)
        inst:ListenForEvent("loramia_com_talent_tree_reset",function()
            inst.components.loramia_com_tag_sys:RemoveTag("multi_armed_creation_maker")
        end)
    --------------------------------------------------------------------------------
    --- 点数获取
        local function send_warning()
            inst.components.loramia_com_rpc_event:PushEvent("loramia_event.inspect_hud_warning",true)            
        end
        inst:ListenForEvent("loramia_com_talent_tree.got_new_points",send_warning)

        local function talent_tree_points_add(inst,num)
            inst.components.loramia_com_talent_tree:AddPointsByMaxCheck(num)
        end
        --- 击杀的目标每 2000血 加一点
        inst:ListenForEvent("killed",function(_,_table)
            local target = _table and _table.victim
            if target and target.sg and target.brainfn and target.components.health then
                local max_health = target.components.health.maxhealth
                local points = math.floor(max_health/2000)
                if points > 0 then
                    -- inst:PushEvent("loramia_event.talent_tree_points_add",points)
                    talent_tree_points_add(inst,points)
                end
            end
        end)        
    --------------------------------------------------------------------------------

end